package com.vdong.common.oauth.service;

import com.github.sd4324530.fastweixin.api.entity.AppCategory;
import com.vdong.common.oauth.common.pojo.CodeTemplateVO;
import com.vdong.common.oauth.common.pojo.WechatCodeAuditRequest;
import com.vdong.common.oauth.common.pojo.WechatCodeCommitRequest;
import com.vdong.common.oauth.common.pojo.WechatJsConfig;
import com.vdong.common.oauth.entity.mo.WechatOnlineVersion;
import com.vdong.common.oauth.entity.mo.WechatPublishSettings;


import java.util.List;

/**
 * @program: kpay-basics-srv
 * @description: 微信服务
 * @author: Mr.Zhang
 * @create: 2018-06-20 14:42
 **/
public interface WechatService {

    /**
     * 新版获取公众号/小程序授权页面
     *
     * @param storeId
     * @param authorizeType 1=公众号,2=小程序
     * @return
     */
    String getAuthUrlNew(Long storeId, Integer authorizeType);

    /**
     * 小程序登录（第三方方式）获取session_key,open_id
     *
     * @param appId
     * @param code
     * @return
     */
    String jscode2session(String appId, String code);

    /**
     * 小程序登录 获取session_key,open_id
     *
     * @param appId
     * @param secret
     * @param code
     * @return
     */
    String jscode2session(String appId, String secret, String code);

    /**
     * 店铺授权token
     *
     * @param wxAppid
     * @return
     */
    String getAuthorizerAccessToken(String wxAppid);

    /**
     * 获取微信js配置信息
     *
     * @param appId  公众号appid
     * @param secret 公众号secret
     * @param url    当前网页的URL
     * @return
     */
    WechatJsConfig getWechatJsConfig(String appId, String secret, String url);

    /**
     * 生成二维码
     *
     * @param actionName
     * @param sceneStr
     * @param expireSeconds
     * @return
     */
    //String createQrcode(QrcodeType actionName, String sceneStr, Integer expireSeconds);

    /**
     * 获取小程序模板
     *
     * @return
     */
    List<CodeTemplateVO> getCodeTemplateList();

    /**
     * 通过平台创建的模板id,提交自己的小程序代码
     *
     * @param commitRequest
     * @return
     */
    Boolean commitCode(WechatCodeCommitRequest commitRequest, String creator);

    /**
     * 生成小程序体验二维码
     *
     * @param storeId
     * @return
     */
    String genAppQrcode(Long storeId);

    /**
     * 生成小程序体验二维码
     *
     * @param storeId
     * @return
     */
    byte[] genAppQrcodeFile(Long storeId);

    /**
     * 生成课程二维码
     *
     * @param storeId
     * @param courseId
     * @param width
     * @return
     */
    //String genCourseQrcode(Long storeId, Long courseId, Integer width);

    /**
     * 生成拼团二维码
     *
     * @param storeId
     * @param groupId
     * @param width
     * @return
     */
    String genGroupQrcode(Long storeId, Long groupId, Long courseId, Integer width);

    /**
     * 生成H5拼团二维码
     * @param storeId
     * @param groupId
     * @param courseId
     * @param width
     * @return
     */
    String genH5GroupQrcode(Long storeId, Long groupId, Long courseId, Integer width);
    /**
     * 二维码文件
     *
     * @param storeId
     * @param courseId
     * @param width
     * @return
     */
    byte[] genCourseQrcodeFile(Long storeId, Long courseId, Integer width);

    /**
     * 获取小程序可选类目
     *
     * @param storeId
     * @return
     */
    List<AppCategory> getAppCategory(Long storeId);

    /**
     * 获取小程序页面配置
     *
     * @param storeId
     * @return
     */
    List<String> getAppPages(Long storeId);

    /**
     * 代码提交审核
     *
     * @param request
     * @param publishId wechat_online_version外键id
     * @param creator
     * @return
     */
    String submitAppAudit(WechatCodeAuditRequest request, Long publishId, String creator);

    /**
     * 通过微信消息机制，被动更新小程序审核结果
     *
     * @param appId
     * @param result
     * @param reason
     * @return
     */
    Boolean updateAuditResult(String appId, Boolean result, String reason);

    /**
     * 线上发布
     *
     * @param storeId
     * @return
     */
    Boolean postedOnline(Long storeId);

    /**
     * 入驻讲师绑定手机号二维码
     *
     * @param storeId
     * @param lecturerId
     * @param width
     * @return
     */
    String genLecturerBindPhoneQrcode(Long storeId, Long lecturerId, Integer width);

    /**
     * 最近一次提交的代码记录(开发版本)
     * @param storeId
     * @return
     */
    WechatPublishSettings getLastPublishSettingsInfo(Long storeId);


    /**
     * 获取线上版本号
     *
     * @param storeId
     * @return
     */
    WechatOnlineVersion getOnlineVersion(Long storeId);

    String getComponentAccessToken();

}
